/*
 * Copyright (c) 2009 LastFM.Desktop Anton Pavlik.
 * All Rights Reserved.
 * 
 * You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, 
 * with or without modifications, and in Source or Object form, provided that You meet the following 
 * conditions:
 * 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
 *
 * 2. You must cause any modified files to carry prominent notices stating that You changed the files; 
 * and
 *
 * 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, 
 * patent, trademark, and attribution notices from the Source form of the Work, excluding those notices 
 * that do not pertain to any part of the Derivative Works.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * You may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 * http://www.apache.org/licenses/LICENSE-2.0 
 *
 * Unless required by applicable law or agreed to in writing, Licensor provides the Work 
 * (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
 * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties 
 * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. 
 * YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE WORK
 * AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE. 
 */
package org.shake.lastfm.model;

import java.util.HashMap;
import java.util.Map;

import javax.swing.ImageIcon;

public class Picture extends Model implements PictureLoadHandler
{
    public enum PictureSize
    {
        MEDIUM("medium"),
        LARGE("large"),
        ORIGINAL("original");
        
        private String stringValue;

        private PictureSize(String stringValue)
        {
            this.stringValue = stringValue;
        }
        
        public String getStringValue()
        {
            return this.stringValue;
        }
    }
    
    private Map<PictureSize, ImageIcon> sizesMap;
    private Map<PictureSize, String> urlsMap;
    private String title;

    public Picture()
    {
        this.sizesMap = new HashMap<PictureSize, ImageIcon>();
        this.urlsMap = new HashMap<PictureSize, String>();
    }
    
    public ImageIcon getImage(PictureSize size)
    {
        ImageIcon image = this.sizesMap.get(size);
        if (image == null)
        {
            String url = this.urlsMap.get(size);
            PicturesLoader.loadPicture(url, this);
        }
        
        return image;
    }

    public void setPictureUrl(String size, String url)
    {
        for (PictureSize sizeEnum : PictureSize.values())
        {
            if (sizeEnum.getStringValue().equals(size))
            {
                this.urlsMap.put(sizeEnum, url);
                break;
            }
        }
    }
    
    @Override
    public void onPictureLoaded(String url, ImageIcon image)
    {
        for (PictureSize size : this.urlsMap.keySet())
        {
            if (this.urlsMap.get(size).equals(url))
            {
                if (image != null)
                {
                    this.sizesMap.put(size, image);
                    fireModelLoaded();
                }
                break;
            }
        }
    }

    public String getTitle()
    {
        return this.title;
    }

    public void setTitle(String title)
    {
        this.title = title;
    }
}